package com.qf.fc.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.io.IoUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qf.fc.Param.UserDetailUpdate;
import com.qf.fc.dao.UserDetailDao;
import com.qf.fc.dao.UserLogDao;
import com.qf.fc.entity.UserDetail;
import com.qf.fc.entity.UserLog;
import com.qf.fc.service.UserDetailService;
import com.qf.fc.vo.R;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 用户详情表(UserDetail)表服务实现类
 *
 * @author makejava
 * @since 2024-09-16 22:56:04
 */
@Service("userDetailService")
@RequiredArgsConstructor
public class UserDetailServiceImpl implements UserDetailService {

    public static final String BASE_URL="http://127.0.0.1:8181/imgs/";

    private final UserDetailDao dao;

    private final UserLogDao logDao;
    @Override
    public R update(UserDetailUpdate userDetailUpdate) {
        //校验
        if(userDetailUpdate!=null){
            //组装对象
            UserDetail userDetail = new UserDetail();
            BeanUtils.copyProperties(userDetailUpdate,userDetail);
            SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
            String formattedDate = sdf.format(new Date()); // 格式化当前日期
            Date date = null; // 将格式化后的字符串解析为Date对象
            try {
                date = sdf.parse(formattedDate);
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
            userDetail.setUpdateTime(date);
            //操作数据库
            if(dao.updateById(userDetail)>0){
                //成功记录日志
                logDao.insert(new UserLog(dao.selectById(userDetail.getId()).getUid(),"个人资料修改","用户实现了个人资料修改。"));
                return R.ok("修改资料成功！");
            }
        }
        return R.fail("修改资料失败！");
    }

    @Override
    public R updateImg(MultipartFile file, String imgUrl, Integer id) {
        // 验证文件是否存在
        if (file.isEmpty()) {
            return R.fail("请选择要上传的图片。");
        }
        // 由于图片已经上传到OSS，不需要检查本地路径和创建目录

        // 更新用户头像信息
        UserDetail detail = new UserDetail();
        detail.setId(id);
        // 使用OSS的URL作为图片地址
        detail.setImageurl(imgUrl); // 确保imgUrl是正确的OSS路径
        detail.setUpdateTime(new Date());
        if (dao.updateById(detail) > 0) {
            logDao.insert(new UserLog(dao.selectById(detail.getId()).getUid(), "个人头像进行修改", "用户实现了个人头像修改。"));
            // 返回
            return R.ok(detail.getImageurl());
        } else {
            return R.fail("图像修改失败，请检查");
        }
    }
}

